/**
* @license jQuery webcam plugin v1.0 09/12/2010
* http://www.xarg.org/project/jquery-webcam-plugin/
*
* Copyright (c) 2010, Robert Eisele (robert@xarg.org)
* Dual licensed under the MIT or GPL Version 2 licenses.
**/

(function ($) {

    var webcam = {

        extern: null, // external select token to support jQuery dialogs
        append: true, // append object instead of overwriting

        width: 320,
        height: 240,

        mode: "callback", // callback | save | stream

        swffile: "jscam.swf",
        quality: 85,

        debug: function () { },
        onCapture: function () { },
        onTick: function () { },
        onSave: function () { },
        onLoad: function () { }
    };

    window.webcam = webcam;

    $.fn.webcam = function (options) {

        if (typeof options === "object") {
            for (var ndx in webcam) {
                if (options[ndx] !== undefined) {
                    webcam[ndx] = options[ndx];
                }
            }
        }

        var source = '<object id="XwebcamXobjectX" type="application/x-shockwave-flash" data="' + webcam.swffile + '" width="' + webcam.width + '" height="' + webcam.height + '"><param name="movie" value="' + webcam.swffile + '" /><param name="FlashVars" value="mode=' + webcam.mode + '&amp;quality=' + webcam.quality + '" /><param name="allowScriptAccess" value="always" /></object>';

        if (null !== webcam.extern) {
            $(webcam.extern)[webcam.append ? "append" : "html"](source);
        } else {
            this[webcam.append ? "append" : "html"](source);
        }

        (_register = function (run) {

            var cam = document.getElementById('XwebcamXobjectX');

            if (cam.capture !== undefined) {

                /* Simple callback methods are not allowed :-/ */
                webcam.capture = function (x) {
                    try {
                        return cam.capture(x);
                    } catch (e) { }
                }
                webcam.save = function (x) {
                    try {
                        return cam.save(x);
                    } catch (e) { }
                }
                webcam.setCamera = function (x) {
                    try {
                        return cam.setCamera(x);
                    } catch (e) { }
                }
                webcam.getCameraList = function () {
                    try {
                        return cam.getCameraList();
                    } catch (e) { }
                }

                webcam.onLoad();
            } else if (0 == run) {
                webcam.debug("error", "Flash movie not yet registered!");
            } else {
                /* Flash interface not ready yet */
                window.setTimeout(_register, 1000 * (4 - run), run - 1);
            }
        })(3);
    }

})(jQuery);